#pragma once
#include <vector>
#include <string>
#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

class LZWDictionary
{
private:
	unsigned int _size;
	vector<unsigned char> words[4096];

public:
	/**
	 * Construtor da classe LZWDictionary
	 */
	LZWDictionary();
	/**
	 * Funcao que adiciona uma palavra no LZWDictionary
	 *
	 * @param: w uma string que representa a palavra a adicionar
	 */
	void addWord(vector<unsigned char> w);
	/**
	 * Funcao que devolve o bitcode de um elemento
	 *
	 * @param: word do tipo string que representa uma palavra do dicionario
	 * @return: unsigned short que corresponde ao bitcode da palavra
	 */
	unsigned short getBitCode(vector<unsigned char> word);
	/**
	 * Funcao que obtem uma palavra em funcao da sua posicao
	 *
	 * @param: i , unsigned short, posicao da palavra
	 * @return : vector<unsigned char> que representa a palavra
	 *
	 */
	vector<unsigned char> getWord(unsigned short i);
	/**
	 * Funcao que retorna o tamanho do dicionario
	 *
	 * @return: unsigned int que representa o tamanho do dicionario
	 */
	unsigned int size();
};
